home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / bytjl86b.arc / SETPROB.PAS < prev    next >
Pascal/Delphi Source File  |  1985-07-12  |  3KB  |  135 lines

  1. program SetProb;
  2.  
  3.     {Copyright 1985 by Bob Keefer}
  4.  
  5.     {SetProb.Pas creates a 3-dimensional byte
  6.     array, Probability[X,Y,Z], in which are stored
  7.     the relative probability of each 3-letter
  8.     trigram found in an input text.
  9.  
  10.     Once the table is completed, it is stored in
  11.     the disc file PROB.DAT.}
  12.  
  13.     {To use this program to add more data to an
  14.     existing version of PROB.DAT, modify procedure
  15.     ZeroProb so that it reads Probability[X,Y,Z]
  16.     from PROB.DAT instead of zeroing the array.
  17.     This can be done by commenting out the lines
  18.     marked with a single * and restoring the lines
  19.     marked with a double **.}
  20.  
  21.  
  22. var
  23.    Ch1, Ch2, Ch3 : char;
  24.    X, Y, Z : integer;
  25.    Filename : string[15];
  26.    TheFile : text;
  27.    Datafile : file of integer;
  28.    Probability : array [0..26,0..26,0..26] of integer;
  29.  
  30. procedure ZeroProb;
  31.  
  32. var
  33.    X,Y,Z : integer;
  34. begin
  35.      {assign (Datafile,'Prob.dat');} {**}
  36.      {reset(Datafile);}   {**}
  37.      for X:=0 to 26 do begin
  38.          for Y:=0 to 26 do begin
  39.              for Z:= 0 to 26 do begin
  40.                  {*} Probability[X,Y,Z] := 0;
  41.                  {**} {read(Datafile,Probability[X,Y,Z]);}
  42.              end;
  43.          end;
  44.      end;
  45.      {close (Datafile);} {**}
  46. end; {ZeroProb}
  47.  
  48.  
  49. procedure ScaleProb;
  50.  
  51. var
  52.    X,Y,Z : integer;
  53.  
  54. begin
  55.      for X:=0 to 26 do begin
  56.          for Y:=0 to 26 do begin
  57.              for Z:= 0 to 26 do begin
  58.                  Probability[X,Y,Z] :=
  59.                     (Probability[X,Y,Z] + 1)
  60.                       div 2;
  61.              end;
  62.          end;
  63.      end;
  64. end; {ScaleProb}
  65.  
  66.  
  67. procedure StartUp;
  68.  
  69. begin
  70.    clrscr;
  71.    writeln('SetProb.Pas');
  72.    writeln('Copyright 1985 by Bob Keefer');
  73.    writeln;
  74.    write ('Enter filename: ');
  75.    readln (Filename);
  76.    assign (TheFile, Filename);
  77.    reset (TheFile);
  78. end;
  79.  
  80. function Cleanup ( A : integer ) : integer;
  81.  
  82. begin
  83.      if (A>64) and (A<91) then Cleanup := A-64
  84.         else Cleanup := 0;
  85. end; {function Cleanup}
  86.  
  87.  
  88. procedure Countem;
  89.  
  90. begin
  91.      Ch1 := #32;
  92.      Ch2 := #32;
  93.      while not EOF (TheFile) do
  94.      begin
  95.           read(TheFile,Ch3);
  96.           X := Cleanup(ord(upcase(Ch1)));
  97.           Y := Cleanup(ord(upcase(Ch2)));
  98.           Z := Cleanup(ord(upcase(Ch3)));
  99.  
  100.           if not (((X=0) and (Y=0)) or
  101.                   ((Y=0) and (Z=0)))
  102.                   then Probability[X,Y,Z] :=
  103.                   Probability[X,Y,Z] + 1;
  104.           if Probability[X,Y,Z] >32000 then ScaleProb;
  105.           Ch1:=Ch2;
  106.           Ch2:=Ch3;
  107.       end;
  108. end;  {Countem}
  109.  
  110. procedure WriteData;
  111. var X,Y,Z : integer;
  112. begin
  113.      for X := 0 to 26 do begin
  114.          for Y := 0 to 26 do begin
  115.              for Z := 0 to 26 do begin
  116.                  write(Datafile,Probability[X,Y,Z]);
  117.              end;
  118.          end;
  119.      end;
  120. end; {procedure WriteData}
  121.  
  122.  
  123. begin {program SetProb}
  124.       ZeroProb;
  125.       Startup;
  126.       Countem;
  127.       assign(Datafile,'Prob.dat');
  128.       rewrite(Datafile);
  129.       WriteData;
  130.       close(DataFile);
  131.       close(TheFile);
  132.       write(#7);
  133. end.      close(TheFile);
  134.       write(#7);
  135. end.